﻿using Csla;
using DevExpress.XtraGrid.Views.Grid;
using System;
using System.ComponentModel;
using System.Windows.Forms;

namespace ErickOrlando.Utilidades.Windows
{
    public partial class _Plantilla : DevExpress.XtraEditors.XtraForm
    {

        #region Constructor
        public _Plantilla()
        {
            InitializeComponent();
            Load += Formulario;
        }
        #endregion

        #region Propiedades

        /// <summary>
        /// Control GridView que se usará en el Formulario de Mantenimiento
        /// </summary>
        [Description("Control GridView que se usará en el Formulario"), Category("Plantilla")]
        public GridView InfoListDataGridView { get; set; }

        /// <summary>
        /// Control BindingSource que se usará en el Formulario
        /// </summary>
        [Description("Control BindingSource que se usará en el Formulario"), Category("Plantilla")]
        public BindingSource ObjetoLista { get; set; }

        #endregion

        #region Objetos Binding Source

        /// <summary>
        /// Comprueba que al menos un Registro haya sido seleccionado
        /// </summary>

        public virtual void CargaDatosActuales()
        {
            if (InfoListDataGridView == null)
                throw new InvalidOperationException(Properties.Resources.InfoListDiseñador);

            if (InfoListDataGridView.SelectedRowsCount <= 0)
                throw new InvalidOperationException(Properties.Resources.EscogerRegistros);

        }

        /// <summary>
        /// Carga un objeto BindingSource con Datos a partir
        /// de un objeto de Negocio
        /// </summary>
        /// <param name="InfoListBindingSource">Objeto BindingSource a ser llenado</param>
        /// <param name="GetInfoList">Objeto de Negocio de Solo Lectura con informacion</param>
        public virtual void CargaControl(BindingSource InfoListBindingSource, object GetInfoList)
        {
            try
            {
                InfoListBindingSource.DataSource = GetInfoList;
            }
            catch (DataPortalException ex)
            {
                throw new ApplicationException(ex.BusinessException.Message);
            }
            catch (Exception ex)
            {
                throw new ApplicationException(ex.Message);
            }
        }

        #endregion

        #region Formulario

        public virtual void Formulario(object sender, EventArgs e)
        {
            if (ObjetoLista != null)
                ObjetoLista.BindingComplete += (o, s) =>
                    {
                        if (InfoListDataGridView != null)
                        {
                            lblEstado.Text = string.Format("Nro de Filas: {0}", InfoListDataGridView.RowCount);
                            DataGridCompleto();
                        }
                    };
        }

        #endregion

        #region Eventos

        /// <summary>
        /// Evento que se dispara cuando un DataGrid ha recibido ya toda la cantidad de datos
        /// desde un BindingSource
        /// </summary>
        protected event Action DataGridCompleto = delegate { };

        #endregion

    }
}